﻿#ifndef CPLCITEMEDITWIDGET_H
#define CPLCITEMEDITWIDGET_H

#include <QMap>
#include <QString>
#include <QStringList>
#include <QWidget>

#include "SPlcGlobalDefine.h"

namespace Ui
{
class CPlcItemEditWidget;
}
using namespace plc;

class CPlcItemEditWidget : public QWidget
{
    Q_OBJECT

    enum EItemType
    {
        Contact = 0,   //触点
        Coil    = 1,   //线圈
        // FunctionType = 2,    //功能块类型
        TON  = 61,   //延时接通
        TOF  = 62,   //延时关断
        TONR = 63,   //保持型延时接通
        CTU  = 64,   //整计数器
        RST  = 65,   //功能块复位
    };
    enum EItemName
    {
        Input        = 0,   //输入
        Ouput        = 1,   //输出
        FunctionName = 2,   //功能块
    };

public:
    explicit CPlcItemEditWidget(QWidget *parent = NULL);
    ~CPlcItemEditWidget();

    //更新数据到界面
    void setDataToUi(SItemData &itemData);
    //从界面获取数据
    SItemData getDataFromUi();
    //重新设置界面显示语言
    void reloadLanguage();

private:
    //元件类型变更处理
    void setComboboxType(EComponentType type);
    //元件名称变更处理
    void setComboboxName(EComponentName name);

    //设置元件名类型
    void setCurrentIndexName(QString name);

private slots:
    //变量名变更、对应调整元件编号设置限制
    void slotChangeComboboxName(QString str);
    //类型选择变更
    void slotChangeComboboxType(int index);
    //参数类型变更
    void slotChangeComboboxParameterType(int index);

private:
    Ui::CPlcItemEditWidget *ui;
    SItemData mLastItemData;

    //元件类型触点菜单列表、线圈菜单列表
    QStringList mContactTypeList, mCoilTypeList, mFunctionTypeList;
    QMap<int32_t, EComponentType> mContactTypeMap, mCoilTypeMap,
        mFunctionTypeMap;

    //元件名称：输入、输出、功能块
    QStringList mInputNameList, mOutputNameList;
    QMap<int32_t, EComponentName> mInputNameMap, mOuputNameMap;

    //参数类型
    QStringList mParameterType;
    //内部定义，区分下拉菜单类型
    EItemType mComboboxType;
    EItemName mComboboxName;
};

#endif   // CPLCITEMEDITWIDGET_H
